home *** CD-ROM | disk | FTP | other *** search
/ Software USA 3 #11 / Software USA Volume 3.11.iso / mac / Games / World Builder / Ray's World Builder Demo / "Chart Room" Code < prev    next >
Text File  |  1995-11-27  |  20KB  |  277 lines

  1. By Ray R. Dunakin III
  2.  
  3. This is the scene code for the scene titled “Chart Room.” The first section is the entire scene code, exactly as it is in the game. After that the code is broken down into sections, with an explanation of each section.
  4. **************************************************************
  5.  
  6. IF{TEXT$=EAST}THEN
  7.     IF{DOOR.CLOSED=SCENE@}THEN
  8.         PRINT{............................................}
  9.         PRINT{The door is closed.}
  10.     EXIT
  11. END
  12. IF{TEXT$=GET}OR{TEXT$=TAKE}OR{TEXT$=MOVE}THEN
  13.     PRINT{............................................}
  14.     IF{TEXT$=POSTER}OR{TEXT$=CHART}THEN
  15.         PRINT{The chart is glued to the wall. You can't take. If you want to read it, enter "READ CHART."}
  16.     EXIT
  17. END
  18. IF{TEXT$=OPEN}THEN
  19.     PRINT{............................................}
  20.     IF{TEXT$=DISK}OR{TEXT$=HOLE}THEN
  21.         PRINT{You have to lift the disk if you want to open it.}
  22.     EXIT
  23.     IF{DOOR.CLOSED=SCENE@}THEN
  24.         SOUND{PHAZE}
  25.         MOVE{DOOR.CLOSED}TO{STORAGE@}
  26.         PRINT{The door east is now open.}
  27.     EXIT
  28.     PRINT{The door is already open.}
  29. EXIT
  30. IF{TEXT$=CLOSE}THEN
  31.     IF{TEXT$=DISK}OR{TEXT$=HOLE}THEN
  32.         PRINT{You can't close that.}
  33.     EXIT
  34.     IF{DOOR.CLOSED>SCENE@}THEN
  35.         SOUND{PHAZE}
  36.         MOVE{DOOR.CLOSED}TO{SCENE@}
  37.     EXIT
  38.     PRINT{............................................}
  39.     PRINT{The door is already closed.}
  40. EXIT
  41. IF{CLICK$=DOOR.CLOSED}THEN
  42.     PRINT{............................................}
  43.     SOUND{PHAZE}
  44.     MOVE{DOOR.CLOSED}TO{STORAGE@}
  45.     PRINT{The door east is now open.}
  46. EXIT
  47. IF{CLICK$=DOOR.OPEN}THEN
  48.     SOUND{PHAZE}
  49.     MOVE{DOOR.CLOSED}TO{SCENE@}
  50. EXIT
  51. IF{TEXT$=READ}THEN
  52.     PRINT{............................................}
  53.     IF{TEXT$=POSTER}OR{TEXT$=CHART}THEN
  54.         MOVE{CHART.2}TO{SCENE@}
  55.         PRINT{Scene code handles actions that are specific to a given scene. Global code handles generic responses throughout the game, regardless of which scene the player is in.}
  56.         PRINT{Finally, the game has built-in responses. Clicking on a movable object will automatically pick it up. Enter a directional command will automatically move the player to the next scene.}
  57.         PRINT{Commands that the game doesn't understand will be answered with "Huh?" or "What?"}
  58.     EXIT
  59. END
  60. IF{CLICK$=CHART.1}OR{CLICK$=HOLE.CLOSED}OR{CLICK$=UNIT}THEN
  61.     PRINT{............................................}
  62. END
  63. IF{CLICK$=CHART.2}THEN
  64.     PRINT{............................................}
  65.     MOVE{CHART.3}TO{SCENE@}
  66.     PRINT{Where the game stops responding to a single command or mouse click will depend on where the code is that handles the response. It will also depend on whether any statement that handles the response closes with END or EXIT.}
  67.     PRINT{If you have a statement in the scene code that handles the player's action, and it closes with EXIT, then the statement will be executed and nothing more will happen.}
  68. EXIT
  69. IF{CLICK$=CHART.3}THEN
  70.     PRINT{............................................}
  71.     MOVE{CHART.4}TO{SCENE@}
  72.     PRINT{If you have a statement in the scene code that handles the player's action, and it closes with END, then the statement will be executed. After the statement is executed, the program will continue checking the scene code.}
  73.     PRINT{If there is nothing more to do in the scene code, then the program will continue on to the global code. If a statement there also handles the player's action, that statement will be executed too.}
  74. EXIT
  75. IF{CLICK$=CHART.4}THEN
  76.     PRINT{............................................}
  77.     MOVE{CHART.2}TO{STORAGE@}
  78.     MOVE{CHART.3}TO{STORAGE@}
  79.     MOVE{CHART.4}TO{STORAGE@}
  80.     PRINT{If the statement in the global code closes with END, or there is nothing in the global code that requires action, then the program will continue to the built-in default responses.}
  81. EXIT
  82. IF{TEXT$=PULL}OR{TEXT$=LIFT}THEN
  83.     PRINT{............................................}
  84.     IF{TEXT$=DISK}OR{TEXT$=HANDLE}THEN
  85.         IF{PHYS.STR.CUR#<200}THEN
  86.             SOUND{UGH}
  87.             SOUND{OOOF}
  88.             PRINT{You grasp the handle on the disk and pull with all your might, but you just don't have the strength to lift it. Only an exceptionally strong person could lift the metal disk.}
  89.         EXIT
  90.         IF{HOLE.CLOSED=SCENE@}THEN
  91.             SOUND{OOOF}
  92.             MOVE{HOLE.CLOSED}TO{STORAGE@}
  93.             PRINT{Your new strength gives you the power needed to lift the metal disk, revealing a small compartment under the floor.}
  94.             PRINT{Inside, you find some kind of power unit.}
  95.             MOVE{UNIT}TO{SCENE@}
  96.         EXIT
  97.         PRINT{The disk has already been opened.}
  98.     EXIT
  99. END
  100.  
  101.  
  102. ************End of code*******************************
  103.  
  104. Now let’s dissect the scene code. There are three main activities the player can do in this scene. First, he has to open the door. Secondly, there is a chart to read. When the player enters “read chart”, a close up of the chart is displayed. Each time the player clicks on the chart, it changes to another diagram. When the player clicks on the last diagram chart, it is removed from the scene. Third, there is a round hole in the floor with a heavy metal cover. The player has to pull it to open it, but he can’t open it until his physical strength is high enough.
  105.  
  106. Here’s the first section of code in the scene:
  107.  
  108. IF{TEXT$=EAST}THEN
  109.     IF{DOOR.CLOSED=SCENE@}THEN
  110.         PRINT{............................................}
  111.         PRINT{The door is closed.}
  112.     EXIT
  113. END 
  114.  
  115. >>>This first section of code is very simple. It handles the player’s movement to the east. First there is a statement that determines if the player has entered the word “east” (or the command-key equivalent). Then a nest statement finds out if the door is closed. An object titled “DOOR.CLOSED” is actually a drawing of the closed door. When the player first enters the scene, it is already in the scene. When the door is open, this object is not in the scene. So, if the DOOR.CLOSED object is in the scene, the nested statement is true, and it prints a response telling the player that the door is closed. If the DOOR.CLOSED object is NOT in the scene, then the nested statement is skipped. Since the first statement closes with END, and the east side of the scene is connected directly to the next scene, the player will automatically be moved to the next scene.<<<
  116.  
  117.  
  118.  
  119. The next section of code is this:
  120.  
  121. IF{TEXT$=GET}OR{TEXT$=TAKE}OR{TEXT$=MOVE}THEN
  122.     PRINT{............................................}
  123.     IF{TEXT$=POSTER}OR{TEXT$=CHART}THEN
  124.         PRINT{The chart is glued to the wall. You can't take. If you want to read it, enter "READ CHART."}
  125.     EXIT
  126.     IF{TEXT$=COVER}OR{TEXT$=LID}OR{TEXT$=DISK}THEN
  127.         PRINT{You can’t take the metal cover, all you can do is try to pull it open.}
  128.     EXIT 
  129. END
  130.  
  131. >>>This section of code handles the player’s attempts to take something. The only objects in the room that the player is likely to try to take are the chart and the cover on the hole, so that is all that is specifically covered in this scene. The first statement checks to see if the player has entered the words “get,” “take,” or “move.” If this is true, then the next statement checks to see if the player has entered the words “poster” or “chart.” (Although it is called a chart in the game, some people may still call it a poster during gameplay, so I’ve included that option.) If this statement is true, then text is printed in the text window telling the player why he or she can’t take the poster. 
  132.  
  133. If the first nested statement is not true, it is skipped. The next nested statement determines whether or not the player has entered the words “cover” “lid” or “disk,” referring to the metal cover on the hole in the floor. If this statement is true, then some text is printed that tells the player that he can only try to pull it open.
  134.  
  135. If neither statement is true, both are skipped. The entire section closes with END, so that if the player tries to pick up an object he has dropped, the game program will automatically handle it.<<<
  136.  
  137.  
  138. Next we have the section that handles the command verb “open:” 
  139.  
  140. IF{TEXT$=OPEN}THEN
  141.     PRINT{............................................}
  142.     IF{TEXT$=DISK}OR{TEXT$=HOLE}OR{TEXT$=COVER}OR{TEXT$=LID}THEN
  143.         PRINT{You have to lift the disk if you want to open it.}
  144.     EXIT
  145.     IF{DOOR.CLOSED=SCENE@}THEN
  146.         SOUND{PHAZE}
  147.         MOVE{DOOR.CLOSED}TO{STORAGE@}
  148.         PRINT{The door east is now open.}
  149.     EXIT
  150.     PRINT{The door is already open.}
  151. EXIT
  152.  
  153. >>>>It starts with a statement that determines if the player has entered the word “open.” If this statement is true, then a nested statement checks to see if the words “disk” “hole” “cover” or “lid” have also been entered. If so, then some text is displayed that tells the player to lift the disk. If not, then the first nested statement is skipped.
  154.  
  155. Since the only other thing in this scene that can be opened is the door, and there are no movable objects in the game that the player might try to open, then the rest of this section handles opening the door. The next nested statement checks to see if the door is closed; that is, if the DOOR.CLOSED object is in the scene. If so, then the appropriate sound is played and the DOOR.CLOSED object is moved to storage. Then text is displayed telling the player that the door is now open.
  156.  
  157. If the DOOR.CLOSED object is NOT in the scene, then that statement is skipped, and some text is printed that tells the player that the door is already open. Anytime that the player might try to open something that is already open, you should have it covered in the code, so that the player will get the correct response, and not just “Huh?” or “What?”<<<<
  158.  
  159. Next we have the section that handles the command verb “close:”
  160.  
  161. IF{TEXT$=CLOSE}THEN
  162.     PRINT{............................................}       
  163.     IF{TEXT$=DISK}OR{TEXT$=HOLE}OR{TEXT$=COVER}OR{TEXT$=LID}THEN
  164.         PRINT{You can't close that.}
  165.     EXIT
  166.     IF{DOOR.CLOSED>SCENE@}THEN
  167.         SOUND{PHAZE}
  168.         MOVE{DOOR.CLOSED}TO{SCENE@}
  169.     EXIT
  170.     PRINT{The door is already closed.}
  171. EXIT
  172.  
  173. >>>This section is almost identical to the “open” section above, except that the actions are reversed. The first statement checks for entry of the word “close.” The first nested statement handles attempts to close the hole in the floor, and the second nested statement handles the closing of the door, first checking to see if the door is open; that is, the DOOR.CLOSED object is out of the scene.<<<<
  174.  
  175. Now, there are two ways that the player can open and close the door in this scene. The first way is by entering the words “open” and “close.” The other way is by clicking on the closed or open doorway. There are two objects for this. One is titled DOOR.OPEN, and the other is titled DOOR.CLOSED. The DOOR.OPEN object is a transparent rectangle that covers the area of the doorway. It is always in the scene. The DOOR.CLOSED object is a drawing of the closed door, and when it is in the scene it covers up the invisible DOOR.OPEN object. The DOOR.CLOSED object is exactly the same size as the DOOR.OPEN object, so that no part of the DOOR.OPEN object is exposed when DOOR.CLOSED is in the scene. These next two sections of code handle the action when the player clicks on either of these objects:
  176.  
  177. IF{CLICK$=DOOR.CLOSED}THEN
  178.     PRINT{............................................}
  179.     SOUND{PHAZE}
  180.     MOVE{DOOR.CLOSED}TO{STORAGE@}
  181.     PRINT{The door east is now open.}
  182. EXIT
  183. IF{CLICK$=DOOR.OPEN}THEN
  184.     SOUND{PHAZE}
  185.     MOVE{DOOR.CLOSED}TO{SCENE@}
  186. EXIT
  187.  
  188. >>>When the player clicks on DOOR.CLOSED, the sound is played and DOOR.CLOSED is moved to storage. Then some text is printed telling the player that the door east is now open. Obviously, the player can see that the door is open, so this text is not strictly necessary. However, it is provided to remind the player which direction to move if he wants to go through the door. Most players find reminders like this very helpful.
  189.  
  190. When the player clicks on DOOR.OPEN, the sound is played and DOOR.CLOSED is returned to the scene. No text is necessary here in this action.<<<
  191.  
  192. Now we come to the section that handles the verb “read:”
  193.  
  194. IF{TEXT$=READ}THEN
  195.     PRINT{............................................}
  196.     IF{TEXT$=POSTER}OR{TEXT$=CHART}THEN
  197.         MOVE{CHART.2}TO{SCENE@}
  198.         PRINT{Scene code handles actions that are specific to a given scene. Global code handles generic responses throughout the game, regardless of which scene the player is in.}
  199.         PRINT{Finally, the game has built-in responses. Clicking on a movable object will automatically pick it up. Enter a directional command will automatically move the player to the next scene.}
  200.         PRINT{Commands that the game doesn't understand will be answered with "Huh?" or "What?"}
  201.     EXIT
  202. END
  203.  
  204. >>>The first statement checks for entry of the word “read.” If this statement is true, then the next statement checks to see if the words “poster” or “chart” have also been entered. If that statement is true, then the object that is a closeup drawing of the chart is moved to the scene, and some text is printed that helps to explain what the chart is about. The statement closes with EXIT, and the program goes no further until the next time the player does something.
  205.  
  206. If the player has not entered the words “poster” or “chart,” then the nested statement is ignored. Since there is nothing else in the scene that can be read, there are no more nested statements, and the “IF{TEXT$=READ}THEN” statement closes with END. This way, if the player enters “read” only, the program will ignore the inner statement, then continue on until it gets to the default response in the Global code, which asks, “Read what?” Thus the player is prompted to input the correct phrase, “read chart.” Also, in this game there is a movable object that the player can read at anytime, in any scene. Because it has to be read in any scene, that is also handled in the Global code. In this way, if the player enters “read clipping” while he is in the Chart Room, the inner statement in the scene code is ignored and the program continues until it gets to the part of the Global code that handles requests to read the clipping.<<<
  207.  
  208. You may have noticed that any section of code that includes text to be displayed, also has a PRINT statement that prints a line of periods before the text is printed. I do this for a very good reason. It helps to break up the text in the text window, making it easier for the player to find the beginning of the new text, and distinguish it from the end of the text already in the window. 
  209.  
  210. I also like to do the same thing when the player clicks on objects that have descriptive text in their data, or that involve scene code with text. This next section of code is what prints the line of periods whenever these objects in the scene are clicked on:
  211.  
  212.  
  213. IF{CLICK$=CHART.1}OR{CLICK$=HOLE.CLOSED}OR{CLICK$=UNIT}THEN
  214.     PRINT{............................................}
  215. END
  216.  
  217. >>>CHART.1 is the object that represents the chart on the wall. When the player clicks on it, he is told that it is a chart. HOLE.CLOSED is the drawing of the metal cover on the hole in the floor. When it is clicked, the player is told that he must pull on it to open it. The “unit” is a movable object that the player will find when he or she opens the hole. I’ve added the seperation periods for this object too, to make it easier for the player to read the description of the object when it is picked up. All the object descriptions are entered in the Object data.<<<
  218.  
  219. The information that I wanted to put on the chart was too big to have it all there on one picture. So I made three chart closeups. When the player enters “read chart” the first closeup is displayed in the scene window. When the player clicks on that closeup, the next closeup is moved to the scene. It covers the first closeup. Then when the second closeup is clicked, the third one is moved to the scene, covering the previous one. Finally, when the third closeup is clicked, all three are returned to storage, starting with the first one, at the bottom of the layer. The following section of code tells the program what to do when the first closeup (CHART.2) is clicked:
  220.  
  221. IF{CLICK$=CHART.2}THEN
  222.     PRINT{............................................}
  223.     MOVE{CHART.3}TO{SCENE@}
  224.     PRINT{Where the game stops responding to a single command or mouse click will depend on where the code is that handles the response. It will also depend on whether any statement that handles the response closes with END or EXIT.}
  225.     PRINT{If you have a statement in the scene code that handles the player's action, and it closes with EXIT, then the statement will be executed and nothing more will happen.}
  226. EXIT
  227.  
  228. The next section tells the program what to do when the second closeup (CHART.3) is clicked:
  229.  
  230. IF{CLICK$=CHART.3}THEN
  231.     PRINT{............................................}
  232.     MOVE{CHART.4}TO{SCENE@}
  233.     PRINT{If you have a statement in the scene code that handles the player's action, and it closes with END, then the statement will be executed. After the statement is executed, the program will continue checking the scene code.}
  234.     PRINT{If there is nothing more to do in the scene code, then the program will continue on to the global code. If a statement there also handles the player's action, that statement will be executed too.}
  235. EXIT
  236.  
  237. The next section tells the program what to do when the third closeup (CHART.4) is clicked:
  238.  
  239. IF{CLICK$=CHART.4}THEN
  240.     PRINT{............................................}
  241.     MOVE{CHART.2}TO{STORAGE@}
  242.     MOVE{CHART.3}TO{STORAGE@}
  243.     MOVE{CHART.4}TO{STORAGE@}
  244.     PRINT{If the statement in the global code closes with END, or there is nothing in the global code that requires action, then the program will continue to the built-in default responses.}
  245. EXIT
  246.  
  247.  
  248. Next is the section of code that handles the player’s attempts to pull the steel cover on the hole in the floor. I wanted the player to be able to open this ONLY after drinking a potion that would increase the player’s strength. The player’s current physical strength variable must be over 200:
  249.  
  250. IF{TEXT$=PULL}OR{TEXT$=LIFT}THEN
  251.     PRINT{............................................}
  252.     IF{TEXT$=DISK}OR{TEXT$=HANDLE}OR{TEXT$=COVER}OR{TEXT$=LID}THEN
  253.         IF{PHYS.STR.CUR#<200}THEN
  254.             SOUND{UGH}
  255.             SOUND{OOOF}
  256.             PRINT{You grasp the handle on the disk and pull with all your might, but you just don't have the strength to lift it. Only an exceptionally strong person could lift the metal disk.}
  257.         EXIT
  258.         IF{HOLE.CLOSED=SCENE@}THEN
  259.             SOUND{OOOF}
  260.             MOVE{HOLE.CLOSED}TO{STORAGE@}
  261.             PRINT{Your new strength gives you the power needed to lift the metal disk, revealing a small compartment under the floor.}
  262.             PRINT{Inside, you find some kind of power unit.}
  263.             MOVE{UNIT}TO{SCENE@}
  264.         EXIT
  265.         PRINT{The disk has already been opened.}
  266.     EXIT
  267. END
  268.  
  269. >>>The first statement checks for entry of the words “pull” or “lift.” If either word has been entered, then the first nested statement checks to see if the words “lid” “handle” “disk” or “cover” have been entered. Notice that if this is not true, then this statement, and ALL statements nested within it, are ignored, the first statement closes with END, and the program continues on to the Global code default response.
  270.  
  271. However, if the first nested statement is true, then another statement nested in that one checks to see if the player’s current physical strength variable is less than 200. The name of this variable is PHYS.STR.CUR#  If it is less than 200, then some struggling sounds are played and text is printed telling the player that he doesn’t have enough strength to open the cover.
  272.  
  273. If the player’s current physical strength is 200 or more, then that statement is ignored, and the program continues. Another nested statement checks to see if the hole is actually closed; that is, if the HOLE.CLOSED object is in the scene. If it is, then a sound is played, the HOLE.CLOSED object is moved to storage, and the “unit” movable object is moved to the scene. Text is also printed, telling the player that he has successfully open the the hole and found the unit. 
  274.  
  275. If the HOLE.CLOSED object is not in the scene, some text tells the player that the hole has already been opened.<<<
  276.  
  277. This is the last of the code for this scene.